[iOS 9] SFSafariViewController の概要
はじめに
iOS 9 で追加された SFSafariViewController について調べてみたので紹介します。
特徴
SFSafariViewController はウェブページを表示するための View Controller です。
- Safari のような UI を使用できる
- ツールバー
- ページロード中のプログレス表示
- SSL暗号化通信の時にアドレスバーに鍵アイコンが表示される
- Safari の機能を使用できる
- Safari AutoFill (クレジットカード、パスワード、連絡先)
- Safari Reader
- Content Blocking
- クッキーなどのデータを Safari と共有できる
- 広告トラッキングなどの目的でアプリ初回起動直後にSafariに飛ばす必要がなくなる
- 提供されるメソッド・プロパティは少ない
- UIKit の UIImagePickerController を使うときのようなお手軽さ
- ウェブページを全面表示するのに適している
SFSafariViewController
- 定義されているメソッドはイニシャライザのみ、プロパティは1つ
@property (nonatomic, weak, nullable) id delegate; - (instancetype)init NS_UNAVAILABLE; - (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; - (instancetype)initWithNibName:(nullable NSString *)nibNameOrNil bundle:(nullable NSBundle *)nibBundleOrNil NS_UNAVAILABLE; - (instancetype)initWithURL:(NSURL *)URL entersReaderIfAvailable:(BOOL)entersReaderIfAvailable NS_DESIGNATED_INITIALIZER; - (instancetype)initWithURL:(NSURL *)URL;
SFSafariViewControllerDelegate
- 定義されているメソッドは2つ
- UIActivity 関連のメソッド
- 「Done」ボタンを押した際に呼ばれるメソッド
- (NSArray *)safariViewController:(SFSafariViewController *)controller activityItemsForURL:(NSURL *)URL title:(nullable NSString *)title; - (void)safariViewControllerDidFinish:(SFSafariViewController *)controller;
サンプルコード
SafariServices フレームワークをインポートして、SFSafariViewController のインスタンスを作成して、表示するだけです。
クラスを SFSafariViewControllerDelegate に適合させて、safariViewControllerDidFinish メソッドを実装すると、SFSafariViewController 上の Done ボタンのタップを検知できます。
#import "ViewController.h" @import SafariServices; @interface ViewController () @end @implementation ViewController - (IBAction)buttonDidTouchUpInside:(id)sender { SFSafariViewController *safariViewController = [[SFSafariViewController alloc] initWithURL:[NSURL URLWithString:@"https://classmethod.jp/"]]; [self presentViewController:safariViewController animated:YES completion:nil]; safariViewController.delegate = self; } - (void)safariViewControllerDidFinish:(SFSafariViewController *)controller { [self dismissViewControllerAnimated:YES completion:nil]; } @end
まとめ
以上のように、SFSafariViewController はコードを数行書くだけで使用できます。単にウェブページを表示したい場合であれば、UIWebView や WKWebView を使用するよりもかなり楽です。活用していきたいです。